using System;
using System.Collections.Generic;
using UnityEngine.UI;

namespace HEFramework
{
    /// <summary>
    ///
    /// UI滑动视图行为接口
    ///
    /// ----------------------------------------
    /// 作者：
    /// 创建时间：2023/05/24 21:47
    /// ----------------------------------------
    /// </summary>
    public interface IUIScrollViewBehaviour : IUIBehaviour
    {
        /// <summary>
        /// 滑动视图
        /// </summary>
        ScrollRect ScrollRect { get; }

        /// <summary>
        /// 物体更新回调
        /// </summary>
        Action<IUIScrollViewItemBehaviour, int> ItemCallback { get; set; }

        /// <summary>
        /// 行数
        /// </summary>
        int RowCount { get; set; }

        /// <summary>
        /// 滑动条位置
        /// </summary>
        float VerticalNormalizedPosition { get; set; }

        /// <summary>
        /// 供外部调用，强制滚动列表，使某一行显示在列表中
        /// </summary>
        /// <param name="_row">行号</param>
        /// <param name="_type">目标行显示在列表的位置：0顶部，1中心，2底部</param>
        void ScrollToRow(int _row, int _type);

        /// <summary>
        /// 根据行号获取复用的物体对象
        /// </summary>
        /// <param name="_row">行号</param>
        IUIScrollViewItemBehaviour GetRowItem(int _row);

        /// <summary>
        /// 供外部调用，强制刷新整个列表，比如数据变化了，刷新一下列表
        /// </summary>
        void Refresh();

        /// <summary>
        /// 供外部调用，强制刷新整个列表的局部物体
        /// </summary>
        /// <param name="_rowStart">开始行</param>
        /// <param name="_count">数量</param>
        void Refresh(int _rowStart, int _count);

        /// <summary>
        /// 供外部调用，强制刷新整个列表的某一个物体
        /// </summary>
        void Refresh(IUIScrollViewItemBehaviour _item);

        /// <summary>
        /// 清空列表
        /// </summary>
        void Clear();
    }
}